package com.example.io;

import com.example.util.ByteUtils;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author readpage
 * @date 2023-02-08 11:18
 */
public class CommonsIoTest {
    private static String userDir = System.getProperty("user.dir");
    /**
     * 统计文件和目录的大小，比较文件的内容是否一致
     */
    @Test
    public void test() throws IOException {
        String filePath = userDir + "/file/hello.txt";
        String dirPath = userDir + "/file";
        File file = new File(filePath);
        File dirFile = new File(dirPath);
        //文件的大小
        System.out.println(file.getName() + "文件的大小" + ByteUtils.toKb(FileUtils.sizeOf(file)) + "kb");
        System.out.println(dirFile.getName() + "文件夹的大小" + ByteUtils.toKb(FileUtils.sizeOfDirectory(dirFile)) + "kb");
        //比较内容是否相同
        File file2 = new File(userDir + "/file/hello2.txt");
        System.out.println(FileUtils.contentEquals(file, file2));
    }

    /**
     * 读取文件内容
     */
    @Test
    public void readTest() throws IOException {
        String filePath = userDir + "/file/hello3.txt";
        File file = new File(filePath);
        String s = FileUtils.readFileToString(file, "utf-8");
        System.out.println("内容:" + s);

        //读出字节
        byte[] bytes = FileUtils.readFileToByteArray(file);
        System.out.println("输出字节内容:" + new String(bytes));

        System.out.println("---------读取行信息---------------");

        //按行读取，对每一行进行相应的处理
        List<String> lines = FileUtils.readLines(file,"UTF-8");
        for (String str: lines) {
            System.out.println(str);
        }
    }

    /**
     * 写入文件内容
     * @throws IOException
     */
    @Test
    public void writeTest() throws IOException {
        String filePath = userDir + "/file/hello4.txt";
        File file = new File(filePath);
        System.out.println("*****************");
        //写入字符串，追加
        FileUtils.writeStringToFile(file, "新数据", "UTF-8", true);
        //写入字节，追加
        FileUtils.writeByteArrayToFile(file, "新数据2".getBytes("UTF-8"), true);
        //按行写入，会换行。
        List<String> lineList=new ArrayList<String>();
        lineList.add("");
        lineList.add("A");
        lineList.add("B");
        lineList.add("C");
        //按行写入，追加
        FileUtils.writeLines(file, "UTF-8", lineList, true);
        //重新读取
        System.out.println("再读:" + FileUtils.readFileToString(file, "UTF-8"));
    }

    /**
     * 可以创建不存在的文件，也可以创建递归的文件。 如果文件已经存在，就不创建，并且不报错。
     */
    @Test
    public void touchTest() throws IOException {
        File file = new File(userDir + "/file/a.txt");
        // 新建单个文件
        FileUtils.touch(file);
    }

    @Test
    public void otherTest() throws IOException {
        FileUtils.forceMkdir(new File(userDir + "/file/test/test"));
    }

    //https://blog.51cto.com/yueshushu/5841034
}
